home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / 2499.ZIP / VERREG.ZIP / DEMO.C < prev    next >
C/C++ Source or Header  |  1990-06-13  |  7KB  |  252 lines

  1. /****************************************************************************
  2.  
  3.     PROGRAM: Demo.c
  4.  
  5.     PURPOSE: Demo template for Windows applications
  6.  
  7.     FUNCTIONS:
  8.  
  9.     WinMain() - calls initialization function, processes message loop
  10.     DemoInit() - initializes window data and registers window
  11.     DemoWndProc() - processes messages
  12.     About() - processes messages for "About" dialog box
  13.  
  14. ****************************************************************************/
  15.  
  16. #define NOCOMM
  17. #define NOMINMAX
  18. #include "windows.h"    /* required for all Windows applications */
  19.  
  20. #include "Demo.h"    /* specific to this program */
  21.  
  22.  
  23.  
  24. HANDLE    hInst;        /* current instance */
  25. HANDLE    hWndMain;    /* handle to the main window */
  26. HANDLE    hMenu;         /* Handle to my new menu */
  27. FARPROC    lpfnFarProc;    /* farproc handle for dialogs */
  28.  
  29.  
  30. #pragma alloc_text( WINMAIN, WinMain )
  31. #pragma alloc_text( DemoIN, DemoInit )
  32. #pragma alloc_text( DemoPROC, DemoWndProc )
  33.  
  34.  
  35.  
  36. /****************************************************************************
  37.  
  38.     FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int)
  39.  
  40.     PURPOSE: calls initialization function, processes message loop
  41.  
  42.     COMMENTS:
  43.  
  44.     This will initialize the window class if it is the first time this
  45.     application is run.  It then creates the window, and processes the
  46.     message loop until a PostQuitMessage is received.  It exits the
  47.     application by returning the value passed by the PostQuitMessage.
  48.  
  49. ****************************************************************************/
  50.  
  51. int PASCAL WinMain( HANDLE hInstance,
  52.             HANDLE hPrevInstance,
  53.             LPSTR lpCmdLine,
  54.             int nCmdShow )
  55. /* current instance         */
  56. /* previous instance         */
  57. /* command line         */
  58. /* show-window type (open/icon) */
  59. {
  60.   MSG    msg;     /* message             */
  61.  
  62.  
  63.  
  64.   if (!DemoInit( hInstance, hPrevInstance, nCmdShow ))
  65.     return (NULL);           /* Exits if unable to initialize     */
  66.  
  67.  
  68.   while (GetMessage(&msg,  /* message structure    */
  69.     NULL,           /* handle of window receiving the message */
  70.     NULL,           /* lowest message to examine    */
  71.     NULL))           /* highest message to examine */
  72.   {
  73.     TranslateMessage(&msg);       /* Translates virtual key codes */
  74.     DispatchMessage(&msg);       /* Dispatches message to window */
  75.   }
  76.  
  77.   return (msg.wParam);       /* Returns the value from PostQuitMessage */
  78. }
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85. /****************************************************************************
  86.  
  87.     FUNCTION: DemoInit
  88.  
  89.     PURPOSE: Initializes window data and registers window class
  90.  
  91. ****************************************************************************/
  92.  
  93. BOOL DemoInit( HANDLE hInstance, HANDLE hPrevInstance, int nCmdShow )
  94.         /* current instance */
  95.         /* previous instance */
  96.         /* default window status */
  97. {
  98.   HANDLE    hMemory;    /* handle to allocated memory */
  99.   PWNDCLASS    pWndClass;    /* structure pointer          */
  100.   BOOL        bSuccess;    /* RegisterClass() result     */
  101.   HWND        hWnd;         /* window handle          */
  102.  
  103.   if ( !hPrevInstance ) {
  104.     hMemory = LocalAlloc(LPTR, sizeof(WNDCLASS));
  105.     pWndClass = (PWNDCLASS) LocalLock(hMemory);
  106.  
  107.     pWndClass->style        = CS_VREDRAW | CS_HREDRAW;
  108.     pWndClass->lpfnWndProc    = DemoWndProc;
  109.     pWndClass->hInstance    = hInstance;
  110.     pWndClass->hIcon        = NULL;
  111.     pWndClass->hCursor        = LoadCursor(NULL, IDC_ARROW);
  112.     pWndClass->hbrBackground    = GetStockObject(WHITE_BRUSH);
  113.     pWndClass->lpszMenuName     = (LPSTR) "Demo";
  114.     pWndClass->lpszClassName    = (LPSTR) "Demo";
  115.     pWndClass->cbClsExtra    = NULL;
  116.     pWndClass->cbWndExtra    = NULL;
  117.  
  118.     bSuccess = RegisterClass(pWndClass);
  119.  
  120.     LocalUnlock(hMemory);    /* Unlocks the memory    */
  121.     LocalFree(hMemory);        /* Returns it to Windows */
  122.  
  123.     // if registering the window class failed then return FALSE
  124.     if ( !bSuccess )
  125.       return( NULL );
  126.   }
  127.  
  128.   hInst = hInstance;    /* Saves the current instance */
  129.  
  130.   hMenu = LoadMenu(hInstance, "DemoMenu");
  131.   hWnd = CreateWindow("Demo",      /* window class     */
  132.      "Demo",            /* window name     */
  133.     WS_OVERLAPPEDWINDOW,        /* window style       */
  134.     CW_USEDEFAULT,            /* x position       */
  135.     CW_USEDEFAULT,            /* y position       */
  136.     CW_USEDEFAULT,            /* width       */
  137.     CW_USEDEFAULT,            /* height       */
  138.     NULL,                /* parent handle   */
  139.     hMenu,                /* menu or child ID*/
  140.     hInstance,            /* instance       */
  141.     NULL);                /* additional info */
  142.  
  143.   if (!hWnd)            /* Was the window created? */
  144.     return (NULL);
  145.  
  146.   hWndMain = hWnd;    /* save the handle to the main window */
  147.  
  148.   ShowWindow(hWnd, nCmdShow);    /* Shows the window       */
  149.   UpdateWindow(hWnd);        /* Sends WM_PAINT message  */
  150.  
  151.   return ( TRUE );     /* Returns result of registering the window */
  152. }
  153.  
  154.  
  155.  
  156.  
  157. /****************************************************************************
  158.  
  159.     FUNCTION: DemoWndProc
  160.  
  161.     PURPOSE:  Processes messages for the main window
  162.  
  163.     MESSAGES:
  164.  
  165.     WM_CREATE    - create window
  166.     WM_DESTROY    - destroy window
  167.     WM_COMMAND    - menu selections and others
  168.  
  169.     COMMENTS:
  170.  
  171.  
  172. ****************************************************************************/
  173.  
  174. DWORD FAR PASCAL DemoWndProc( HWND hWnd,    /* window handle */
  175.                   WORD message,    /* type of message */
  176.                   WORD wParam,    /* additional information */
  177.                   DWORD lParam)    /* additional information */
  178. {
  179.  
  180.   switch (message) {
  181.  
  182.     case WM_CREATE:                /* message: window being created */
  183.       // window initialization goes here
  184.       break;
  185.  
  186.     case WM_DESTROY:          /* message: window being destroyed */
  187.       PostQuitMessage(0);
  188.       break;
  189.  
  190.     case WM_COMMAND:
  191.       switch (wParam) {
  192.  
  193.         case IDM_ABOUT:    // creates a modal dialog
  194.       lpfnFarProc = MakeProcInstance ( DemoDlgProc1, hInst );
  195.       DialogBox( hInst, "DEMODLG", hWnd, lpfnFarProc );
  196.       FreeProcInstance( lpfnFarProc );
  197.       break; // case IDM_ABOUT
  198.  
  199.       }
  200.       break;
  201.  
  202.     default: /* Passes it on if unproccessed */
  203.       return (DefWindowProc(hWnd, message, wParam, lParam));
  204.   }
  205.  
  206.   return( FALSE );
  207. }
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214. BOOL FAR PASCAL DemoDlgProc1( HWND hDlg,
  215.                   WORD iMessage,
  216.                   WORD wParam,
  217.                   DWORD lParam )
  218. {
  219.  
  220.      char    Temp[60];
  221.  
  222.  
  223.      switch (iMessage)
  224.      {
  225.        case WM_INITDIALOG:
  226.      // should return false if the focus is set to a control by this
  227.      // function
  228.      LoadString( hInst, IDS_NUMBER, (LPSTR) Temp, NUMBER+1 );
  229.      SetDlgItemText( hDlg, 108, Temp );
  230.      LoadString( hInst, IDS_NAME, (LPSTR) Temp, NAME+1 );
  231.      SetDlgItemText( hDlg, 110, Temp );
  232.          break;
  233.  
  234.        case WM_COMMAND:
  235.      EndDialog( hDlg, 0 );
  236.      break;    // ID_CANCEL
  237.  
  238.  
  239.  
  240.        default:    // iMessage switch
  241.          return FALSE ;
  242.  
  243.      }    // iMessage switch
  244.  
  245.    return( TRUE );
  246. }
  247.  
  248.  
  249.  
  250.  
  251.  
  252.